﻿using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JobbJakt
{
    public partial class Language
    {
        public Language(SkillLevel skillLevel, string languageName, int languageID = 0)
        {
            LanguageName = languageName;
            SkillLevel = skillLevel;
        }

        public override string ToString()
        {
            return string.Format("Språk: {0} Nivå: {1}", LanguageName, LanguageID);
        }

        /// <summary>
        /// Metod för att lägga till ett språk
        /// </summary>
        /// <param name="language">Tar emot en Language</param>
        /// <returns>Returnerar affected rows</returns>
        public static int AddLanguage(Language language)
        {
            JobbJaktDB.Languages.AddOrUpdate(language);
            return JobbJaktDB.Save();
        }

        /// <summary>
        /// Metod för att hämta alla språk från databasen
        /// </summary>
        /// <returns>En lista med alla språk från databasen</returns>
        public static List<Language> GetAllLanguages()
        {
            return 
                (from c in JobbJaktDB.Languages
                    select c).ToList();
        }

        /// <summary>
        /// Metod för att hämta ut språk som en viss användare har kopplat till sig i databasen
        /// </summary>
        /// <param name="userName">Användarens användarnamn</param>
        /// <returns>Lista med spåk som är kopplade till användaren</returns>
        public static List<Language> GetLanguageByUserName(string userName)
        {
            return
                (from c in JobbJaktDB.Languages
                    where c.UserName == userName
                    select c).ToList();
        }

        /// <summary>
        /// Metod för att ta bort ett språk ur databasen
        /// </summary>
        /// <param name="languageID">Parameter för att identifiera vilket språk</param>
        /// <returns>Returnerar affected rows</returns>
        public static int RemoveLanguage(int languageID)
        {
            var query =
                (from c in JobbJaktDB.Languages
                    where c.LanguageID == languageID
                    select c).FirstOrDefault();

            JobbJaktDB.Languages.Remove(query);
            return JobbJaktDB.Save();
        }

        /// <summary>
        /// Metod för att uppdatera ett språk
        /// </summary>
        /// <param name="language">Tar emot en Language</param>
        /// <returns>Returnerar affected rows</returns>
        public static int UpdateLanguage(Language language)
        {
            JobbJaktDB.Languages.AddOrUpdate(language);
            return JobbJaktDB.Save();
        }
    }
}
